﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using BitBox.Framework.KBR.Model;
using BitBox.Framework.KBR.DAL;

namespace BitBox.WinForm.BackOffice
{
    public partial class frmPerguntas : Form
    {
        #region /* Atributos Privados */

        private const String mensagemErro = "Ocorreu um erro na execução da operação solicitada.\nEntre em contato com o Administrador do Sistema.\nDetalhes técnicos:\n"; // Mensagem de erro padrão para a Messagebox.

        private ConhecimentoInfo conhecimentoInfo = new ConhecimentoInfo();
        private PerguntasInfo perguntasInfo = new PerguntasInfo();
        private PerguntasInfo perguntasInfoRecarrega = new PerguntasInfo();
        private RespostasInfo respostasInfo = new RespostasInfo();

        private List<PerguntasInfo> listaPergunta;

        private ConhecimentoDAL cDAL = new ConhecimentoDAL();
        private PerguntasDAL pDAL = new PerguntasDAL();
        private RespostasDAL rDAL = new RespostasDAL();

        private int indice = 0;

        #endregion



        #region /* Propriedades Públicas */

        #endregion



        #region /* Construtores */

        public frmPerguntas()
        {
            InitializeComponent();
        }

        #endregion



        #region /* Métodos Privados */

        private void LimpaDados()
        {
            txtPergunta.Text = String.Empty;
            txtAlternativaCorreta.Text = String.Empty;
            txtAlternativa1.Text = String.Empty;
            txtAlternativa2.Text = String.Empty;
            txtAlternativa3.Text = String.Empty;
            rbtHistoria.Checked = true;
        }

        private String AreaSelecionada()
        {
            String retorno = "";

            foreach (RadioButton rbt in gbxAreaConhecimento.Controls)
	        {
                if (rbt.Checked)
                    retorno = rbt.Tag.ToString().ToUpper();
	        }

            return retorno;
        }

        private void PreencheInfoPergunta()
        {
            try
            {
                conhecimentoInfo = cDAL.SelectByDescricao(AreaSelecionada());
                
                perguntasInfo.ID_CONHECIMENTO = conhecimentoInfo.ID_CONHECIMENTO;
                perguntasInfo.DS_PERGUNTA = txtPergunta.Text.Trim();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void CarregaDataGrid()
        {
            try
            {
                PerguntasInfo info = new PerguntasInfo();
                info.FL_RESPOSTA = true;

                listaPergunta = pDAL.SelectByAnyFilters(info);

                BindingSource bs = new BindingSource();
                bs.DataSource = listaPergunta.OrderBy(re => re.ID_PERGUNTA);

                if (listaPergunta.Count > 0)
                    dgvPerguntas.DataSource = bs;
                else
                {
                    dgvPerguntas.DataSource = null;
                    indice = -1;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(mensagemErro + ex.Message + "\n" + ex.StackTrace, "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void PreencheInfoPeloGrid()
        {
            perguntasInfoRecarrega.ID_PERGUNTA = int.Parse(dgvPerguntas.Rows[indice].Cells["ID_PERGUNTA"].Value.ToString());
            perguntasInfoRecarrega.DS_PERGUNTA = dgvPerguntas.Rows[indice].Cells["DS_PERGUNTA"].Value.ToString();
            perguntasInfoRecarrega.DS_RESPOSTA = dgvPerguntas.Rows[indice].Cells["DS_RESPOSTA"].Value.ToString();
            //Parei aqui
        }

        private void Inclusão()
        {
            int perguntaID = 0;

            try
            {
                PreencheInfoPergunta();

                if (!perguntasInfo.ID_CONHECIMENTO.Equals(0))
                {
                    perguntaID = pDAL.Insert(perguntasInfo);

                    //Resposta Correta
                    respostasInfo.ID_PERGUNTA = perguntaID;
                    respostasInfo.RESPOSTA = txtAlternativaCorreta.Text.Trim();
                    respostasInfo.CERTA = true;

                    rDAL.Insert(respostasInfo);

                    //Outras Respostas
                    respostasInfo.ID_PERGUNTA = perguntaID;
                    respostasInfo.RESPOSTA = txtAlternativa1.Text.Trim();
                    respostasInfo.CERTA = false;

                    rDAL.Insert(respostasInfo);
                    
                    respostasInfo.ID_PERGUNTA = perguntaID;
                    respostasInfo.RESPOSTA = txtAlternativa2.Text.Trim();
                    respostasInfo.CERTA = false;

                    rDAL.Insert(respostasInfo);

                    respostasInfo.ID_PERGUNTA = perguntaID;
                    respostasInfo.RESPOSTA = txtAlternativa3.Text.Trim();
                    respostasInfo.CERTA = false;

                    rDAL.Insert(respostasInfo);

                    MessageBox.Show("Inclusão efetuada com sucesso!", "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    
                    LimpaDados();
                }
                else
                {
                    MessageBox.Show("Preencha todos os campos");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(mensagemErro + ex.Message + "\n" + ex.StackTrace, "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Alterar()
        {
            txtPergunta.Text = perguntasInfoRecarrega.DS_PERGUNTA;
            txtAlternativaCorreta.Text = perguntasInfoRecarrega.DS_RESPOSTA;
            //parei aqui

            menuOp.SelectedIndex = 0;
        }

        private void Exclusao()
        {
            try
            {
                if (indice >= 0)
                {
                    DialogResult result = MessageBox.Show("Confirma Exclusão?", "Mensagem do Sistema", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (result == DialogResult.OK)
                    {
                        int pergID = int.Parse(dgvPerguntas.Rows[indice].Cells["ID_PERGUNTA"].Value.ToString());
                        pDAL.Delete(pergID);
                    }

                    CarregaDataGrid();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(mensagemErro + ex.Message + "\n" + ex.StackTrace, "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion



        #region /* Métodos Públicos */

        public frmPerguntas(int tabIndex)
        {
            InitializeComponent();
            menuOp.SelectedIndex = tabIndex;
        }

        #endregion



        #region /* Tratadores de Eventos */

        private void frmPerguntas_Load(object sender, EventArgs e)
        {
            CarregaDataGrid();
        }

        private void btnIncluir_Click(object sender, EventArgs e)
        {
            Inclusão();
        }

        private void btnAlterar_Click(object sender, EventArgs e)
        {
            Alterar();
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            Exclusao();
        }
        
        private void dgvPerguntas_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            indice = e.RowIndex;
            PreencheInfoPeloGrid();
        }

        #endregion

        
    }
}
